home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-18 | 9.2 KB | 180 lines | [TEXT/KAHL] |
- /*
- File: softVdig.c
-
- Contains: Software video digitzer header file (constants, structs, prototypes)
-
- Written by: Peter Hoddie (mostly) and Casey King and Gary Woodcock
-
- Refer to develop Issue 14, "Video Digitizing Under QuickTime",
- for details on this code.
-
- This code requires QuickTime 1.5.
-
- Copyright: © 1993 by Apple Computer, Inc.
-
- Change History (most recent first):
-
- */
-
- //-----------------------------------------------------------------------
- // includes
-
- #ifndef _SOFTVDIG_
- #define _SOFTVDIG_
-
- #include <Components.h>
- #include "QuickTimeComponents.h"
- #include <QDOffscreen.h>
-
- // Comment out this line if you are building a standalone component
- #define DEBUG_IT
-
- #ifdef DEBUG_IT
- pascal ComponentResult softVdig (ComponentParameters *params, Handle storage);
- Component RegisterSoftVdig(void);
- #endif DEBUG_IT
-
-
- // constants which define the characteristics of this vdig
- // there are 2 other global controls which are initialized in vdigOpen
- // these global controls are gAttachedGDevice and gAuxBufferRect
-
- #define kMaxHorNTSCIn 320 // maps to the MaxSrcRect width
- #define kMaxVerNTSCIn 240 // maps to the MaxSrcRect height
- #define kVerBlank 0 // would map to VerBlankRect, but unused here
- #define gMaxSoftVdigCount 1 // how many can be open at once
- #define gDoesDepths 0 // what output depth can the device output to
- #define gDoesPlaythru false // will respond to VDSetPlayThruOnOff
- #define gHasAuxBuffer false // simulates local buffering
- #define gAuxDepth 16 // for use in simulating local buffering
- #define gCanAsync true // simulates async grab capability
- #define gCanClip true // clipping can be applied
- #define gCanScale true // supports stretch & shrink
- #define gCanDMA true // simulates the "go anywhere" vdig
- #define gDMADepths 16 | 8 // depths that DMA works
- #define gMaxHeight 240 // maximum scalable height
- #define gMaxWidth 320 // maximum scalable width
- #define gMinHeight 10 // minimum scalable height
- #define gMinWidth 10 // minimum scalable width
- #define gDoesFrameRate false // simulates controllable frame rate grabs
- #define gVideoTimeScale 2997
- #define gDoesCompress false // capable of producing compressed data
- #define gOnlyDoesCompress false // can't provide image data
- #define gOnlyCompressType 'rpza' // set to zero to support all compression types
-
- // softvdig global variables
-
- typedef struct {
- ComponentInstance self; // this instance
- long frameNumber; // frame counter
- GWorldPtr tempPort; // use for drawing simulated video frames
- Rect maxSrcRect; // for VDGetMaxSrcRect
- Rect digiRect; // part of frame to use
- Boolean playThruOn; // draw during idle
- Rect playThruRect;
- PixMapHandle playThruPixMap;
- GWorldPtr auxBuffer; // the auxbuffer, if using one
- MatrixRecord matrix; // display matrix
- RgnHandle clipRgn; // current clip
- Point clipOrigin; // top left of display when clip set
- VdigBufferRecListHandle bufferList; // buffer list for async stuff
- short pendingAsyncBuffer; // pending grab request... -1 if none.
-
- // compressed source stuff
- OSType compressType;
- short compressDepth;
- Rect compressRect;
- CodecQ spatialQuality;
- CodecQ temporalQuality;
- long keyFrameRate;
- ImageDescriptionHandle desc;
- Ptr compressBuffer;
- GWorldPtr compressGW;
- Boolean forceKeyFrame;
- Boolean compressOn;
- ImageSequence compressSeq;
- TimeBase timeBase;
- TimeValue nextFrameTime; // next time if doing frame rate limiting
- TimeValue frameTimeStep; // increment for stepping, non-zero means do limiting
-
- // more globals
- long inputCurrentFlags;
- long outputCurrentFlags;
- unsigned short blackLevel;
- unsigned short whiteLevel;
- unsigned short brightness;
- unsigned short hue;
- unsigned short saturation;
- unsigned short contrast;
- unsigned short sharpness;
- Rect gAuxBufferRect;
- GDHandle gAttachedGDevice;
-
- } vdigGlobalsRecord, *vdigGlobalsPtr, **vdigGlobals;
-
- // prototypes that map to VD API calls
- pascal ComponentResult vdigOpen(vdigGlobals storage, ComponentInstance self);
- pascal ComponentResult vdigClose(vdigGlobals storage, ComponentInstance self);
- pascal ComponentResult vdigCanDo(vdigGlobals storage, short ftnNumber);
- pascal ComponentResult vdigVersion(vdigGlobals storage);
-
- pascal VideoDigitizerError vdigGetMaxSrcRect(vdigGlobals storage, short inputStd, Rect *maxSrcRect);
- pascal VideoDigitizerError vdigGetActiveSrcRect(vdigGlobals storage, short inputStd, Rect *activeSrcRect);
- pascal VideoDigitizerError vdigSetDigitizerRect(vdigGlobals storage, Rect *digiRect);
- pascal VideoDigitizerError vdigGetDigitizerRect(vdigGlobals storage, Rect *digiRect);
- pascal VideoDigitizerError vdigUseThisCLUT(vdigGlobals storage, CTabHandle colorTableHandle);
- pascal VideoDigitizerError vdigGrabOneFrame(vdigGlobals storage);
- pascal VideoDigitizerError vdigSetContrast(vdigGlobals storage, unsigned short *contrast);
- pascal VideoDigitizerError vdigSetHue(vdigGlobals storage, unsigned short *hue);
- pascal VideoDigitizerError vdigSetBrightness(vdigGlobals storage, unsigned short *brightness);
- pascal VideoDigitizerError vdigSetSaturation(vdigGlobals storage, unsigned short *saturation);
- pascal VideoDigitizerError vdigSetSharpness(vdigGlobals storage, unsigned short *sharpness);
- pascal VideoDigitizerError vdigSetBlackLevel(vdigGlobals storage, unsigned short *blackLevel);
- pascal VideoDigitizerError vdigSetWhiteLevel(vdigGlobals storage, unsigned short *whiteLevel);
- pascal VideoDigitizerError vdigGetContrast(vdigGlobals storage, unsigned short *contrast);
- pascal VideoDigitizerError vdigGetHue(vdigGlobals storage, unsigned short *hue);
- pascal VideoDigitizerError vdigGetBrightness(vdigGlobals storage, unsigned short *brightness);
- pascal VideoDigitizerError vdigGetSaturation(vdigGlobals storage, unsigned short *saturation);
- pascal VideoDigitizerError vdigGetSharpness(vdigGlobals storage, unsigned short *sharpness);
- pascal VideoDigitizerError vdigGetBlackLevel(vdigGlobals storage, unsigned short *blackLevel);
- pascal VideoDigitizerError vdigGetWhiteLevel(vdigGlobals storage, unsigned short *whiteLevel);
- pascal VideoDigitizerError vdigGetVideoDefaults(vdigGlobals storage,
- unsigned short *blackLevel, unsigned short *whiteLevel,
- unsigned short *brightness, unsigned short *hue, unsigned short *saturation,
- unsigned short *contrast, unsigned short *sharpness);
- pascal VideoDigitizerError vdigGetMaxAuxBuffer(vdigGlobals storage, PixMapHandle *pm, Rect *r);
- pascal VideoDigitizerError vdigGetDigitizerInfo(vdigGlobals storage, DigitizerInfo *info);
- pascal VideoDigitizerError vdigGetCurrentFlags(vdigGlobals storage, long *inputCurrentFlag, long *outputCurrentFlag);
- pascal VideoDigitizerError vdigSetPlayThruOnOff(vdigGlobals storage, short state);
- pascal VideoDigitizerError vdigSetPlayThruDestination(vdigGlobals storage, PixMapHandle dest, Rect *destRect, MatrixRecord *m, RgnHandle mask);
- pascal VideoDigitizerError vdigSetupBuffers(vdigGlobals storage, VdigBufferRecListHandle bufferList);
- pascal VideoDigitizerError vdigPreflightDestination(vdigGlobals storage, Rect *digitizerRect, PixMap **dest, Rect *destRect, MatrixRecord *m);
- pascal VideoDigitizerError vdigGrabOneFrameAsync(vdigGlobals storage, short buffer);
- pascal long vdigDone(vdigGlobals storage, short buffer);
- pascal VideoDigitizerError vdigGetNumberOfInputs(vdigGlobals storage, short *inputs);
- pascal VideoDigitizerError vdigGetInputFormat(vdigGlobals storage, short input, short *format);
- pascal VideoDigitizerError vdigSetInput(vdigGlobals storage, short input);
- pascal VideoDigitizerError vdigGetInput(vdigGlobals storage, short *input);
- pascal VideoDigitizerError vdigSetCompression(vdigGlobals storage, OSType compressType, short depth, Rect *bounds,
- CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate);
- pascal VideoDigitizerError vdigCompressOneFrameAsync(vdigGlobals storage);
- pascal VideoDigitizerError vdigCompressDone(vdigGlobals storage, Boolean *done, Ptr *theData, long *dataSize, unsigned char *similarity, TimeRecord *tr);
- pascal VideoDigitizerError vdigReleaseCompressBuffer(vdigGlobals storage, Ptr theBufffer);
- pascal VideoDigitizerError vdigGetImageDescription(vdigGlobals storage, ImageDescriptionHandle desc);
- pascal VideoDigitizerError vdigResetCompressSequence(vdigGlobals storage);
- pascal VideoDigitizerError vdigSetCompressionOnOff(vdigGlobals storage, Boolean newState);
- pascal VideoDigitizerError vdigGetCompressionTypes(vdigGlobals storage, VDCompressionListHandle h);
- pascal VideoDigitizerError vdigSetTimeBase(vdigGlobals storage, TimeBase t);
- pascal VideoDigitizerError vdigSetFrameRate(vdigGlobals storage, Fixed framesPerSecond);
- pascal VideoDigitizerError vdigGetDMADepths(vdigGlobals storage, long *depthArray, long *preferredDepth);
- pascal VideoDigitizerError vdigGetPreferredTimeScale(vdigGlobals storage, TimeScale *preferred);
-
- // prototypes for utility functions
- void makeOffscreen(vdigGlobals storage);
- void tossOffscreen(vdigGlobals storage);
- void drawVideoFrame(vdigGlobals storage, Point where, PixMapHandle destPixMap);
- Boolean validatePixMap(vdigGlobals storage, PixMapHandle p);
- void tossCompressStuff(vdigGlobals storage);
-
- #endif _MATHCOMPONENT_
-